home *** CD-ROM | disk | FTP | other *** search
- ;
- ; helper control program
- ;
- ; 1994.07.04 remake by K.Miyazaki
- ;
- .386p
- code segment byte public use16 'CODE'
- code ends
-
- code segment
- assume cs:code,ds:code,es:code,ss:nothing
-
- CTRL_INT equ 0D9h
-
- org 02ch
- EnvSeg label word
-
- org 05Ch
- Exe_fcb1 label byte
-
- org 06Ch
- Exe_fcb2 label byte
-
- org 080h
- CmdsLine label byte
-
- org 100h
- entry: jmp main
-
- Exe_Param dw ? ; Envp Seg +0
- dw offset Pam_line ; para offset +2
- dw ? ; seg +4
- dw offset Exe_fcb1 ; FCB1 offset +6
- dw ? ; seg +8
- dw offset Exe_fcb2 ; FCB2 offset +10
- dw ? ; seg +12
-
- Def_Cmd db 'Q:\RUN386.EXE',0
- Def_Param db 26
- db '-nocrtreset '
- Def_Exp db 'Q:\HELPER.EXP '
- Def_ExpPara db 0Dh
- db 100 dup (0)
-
- Pam_line db 128 dup (0)
-
- Menu_Mark db 1,2,3,4
- Menu_Work db 123 dup (0) ; M_MENU用のワ-クエリア
- Boot_Drv db 0 ; 起動したドライブNo.
- Cmd_code dw 0 ; コマンドコード(INPUT)
- Cmd_stat dw 0 ; エラーレベル (OUTPUT)
- Dos_errno dw 0 ; INT21(#4B)時に返されるAXの値(OUTPUT)
- Dev_code dw 0 ; INT24時に渡されるAXの値(OUTPUT)
- Err_code dw 0 ; INT24時に渡されるDIの値(OUTPUT)
- Cmd_line db 128 dup (0)
-
- Ctrl_Vect dd far
- Abort_Vect dd far
-
- exec proc near
- mov si, offset Cmd_line
- cld
-
- exec_0: mov al,[si]
- cmp al,' '
- je exec_01
- cmp al,09h
- jne exec_1
- exec_01: inc si
- jmp exec_0
-
- exec_1: mov al,[si]
- cmp al,0
- je exec_3
- cmp al,' '
- je exec_2
- cmp al,09h
- je exec_2
- cmp al,0Dh
- je exec_2
- inc si
- jmp exec_1
-
- exec_2: mov byte ptr [si], 0
- inc si
-
- exec_3: mov di, offset Pam_line + 1
- mov ah,0
-
- exec_4: mov al,[si]
- cmp al,0
- je exec_5
- cmp al,0Dh
- je exec_5
- movsb
- inc ah
- jmp exec_4
-
- exec_5: mov Pam_line,ah
- mov byte ptr [di], 0Dh
- mov byte ptr [di + 1], 0
-
- mov di,offset Exe_Param
- mov word ptr [di+2],offset Pam_line
-
- mov si,offset Pam_line + 1
- mov di,offset Exe_fcb1
- mov ax,2901h
- int 21h
- mov di,offset Exe_fcb2
- mov ax,2901h
- int 21h
-
- mov Dos_errno,0
- mov Dev_code,0
- mov Err_code,0
-
- mov dx,offset Cmd_line
- mov bx,offset Exe_Param
- mov ax,4B00h
- int 21h
- jnc exec_6
- mov Dos_errno,ax
- ret
-
- exec_6: mov ah,4Dh
- int 21h
- mov Cmd_stat,ax
- ret
-
- exec endp
-
- menu proc near
- mov ah,0Eh
- mov dl,Boot_Drv
- int 21h
-
- mov di,offset Exe_Param
- mov word ptr [di+2],offset Def_Param
-
- mov si,offset Def_Exp
- mov di,offset Exe_fcb1
- mov ax,2901h
- int 21h
- mov di,offset Exe_fcb2
- mov ax,2901h
- int 21h
-
- mov dx,offset Def_Cmd
- mov bx,offset Exe_Param
- mov ax,4B00h
- int 21h
- ret
-
- menu endp
-
- Ctrl_Trap proc far
- push cs
- pop es
- mov bx,cs
- shl ebx,16
- mov bx,offset Cmd_code
- iret
- Ctrl_Trap endp
-
- Abort_Trap proc far
- mov cs:Dev_code,ax
- mov cs:Dev_code,di
- mov al,3
- iret
- Abort_Trap endp
-
- main proc near
- mov ax,cs
- mov ds,ax
- mov es,ax
-
- mov sp,offset Local_Stack ; Stack Init
-
- mov bx,offset End_of_Prog
- add bx,15
- shr bx,4
- mov ah,4Ah
- int 21h ; Memory resize
-
- mov ah,19h
- int 21h
- mov Boot_Drv,al
-
- add al,'A'
- mov Def_Cmd,al
- mov Def_Exp,al
-
- mov di,offset Exe_Param
- mov ax,EnvSeg
- mov [di+0],ax
- mov ax,ds
- mov [di+4],ax
- mov [di+8],ax
- mov [di+12],ax
-
- push es
- mov ah,35h
- mov al,CTRL_INT
- int 21h
- mov word ptr Ctrl_Vect,bx
- mov ax,es
- mov word ptr Ctrl_Vect + 2,ax
- pop es
-
- mov dx,offset Ctrl_Trap
- mov ah,25h
- mov al,CTRL_INT
- int 21h
-
- push es
- mov ax,3524h
- int 21h
- mov word ptr Abort_Vect,bx
- mov ax,es
- mov word ptr Abort_Vect + 2,ax
- pop es
-
- mov dx,offset Abort_Trap
- mov ax,2524h
- int 21h
-
- cld
- mov si,offset CmdsLine
- mov di,offset Def_ExpPara
- lodsb
- main_ex_1: cmp al,0
- je main_ex_2
- mov ah,byte ptr [si]
- cmp ah,0
- je main_ex_2
- cmp ah,0Dh
- je main_ex_2
- movsb
- inc Def_Param
- dec al
- jmp main_ex_1
-
- main_ex_2: mov ah,0Dh
- mov byte ptr [di], ah
-
- main_1: cmp Cmd_code,0
- je main_2
- cmp Cmd_code,0FFh
- je main_end
- call exec
- mov Cmd_code,0
- main_2: call menu
- jnc main_1
-
- main_end: push ds
- lds dx,Ctrl_Vect
- mov ah,25h
- mov al,CTRL_INT
- int 21h
- pop ds
-
- push ds
- lds dx,Abort_Vect
- mov ax,2524h
- int 21h
- pop ds
-
- mov ax,4C00h ; End of Prog
- int 21h
-
- main endp
-
- db 256 dup (?)
- Local_Stack label word
- End_of_Prog label word
-
- code ends
- end entry